# components.py
import tkinter as tk
from tkinter import ttk
from tkcalendar import Calendar, DateEntry
from datetime import datetime

class DatePicker(ttk.Frame):
    """日期选择器组件"""
    def __init__(self, parent, default_date=None):
        super().__init__(parent)
        self.parent = parent
        
        # 如果没有提供默认日期，使用今天的日期
        print("传入的默认日期:", default_date)
        if default_date:
            print("进入 if 分支")
            # 确保 default_date 是 datetime 对象
            if isinstance(default_date, datetime):
                date_str = default_date.strftime('%Y-%m-%d')
            else:
                date_str = datetime.strptime(str(default_date), '%Y-%m-%d').strftime('%Y-%m-%d')
        else:
            date_str = datetime.now().strftime('%Y-%m-%d')
        
        print("value=",date_str)
        # 正确打印 date_var 的值
        self.date_var = tk.StringVar(value=date_str)
        print("date_var 的值:", self.date_var.get())
        default_date_obj = datetime.strptime(date_str, '%Y-%m-%d').date()

        # 创建日期输入框
        try:
            self.date_entry = DateEntry(
                self, 
                textvariable=self.date_var, 
                locale='zh_CN',  # 设置中文显示
                width=12, 
                date=default_date_obj,  # ? 显式指定默认日期
                date_pattern='YYYY-MM-DD',  # 使用大写格式符
                background='darkblue',
                foreground='white',
                borderwidth=2
            )
        except ValueError:
            print("error here")
            return None
        self.date_entry.pack(side=tk.LEFT, padx=(0, 5))
        # ? 手动恢复 textvariable 的值（防止控件修改）
        self.date_var.set(date_str)
        print("date_var after 的值:", self.date_var.get())
        # 创建日期选择按钮
        self.date_btn = ttk.Button(self, text="日期选择", command=self.select_date)
        self.date_btn.pack(side=tk.LEFT)
    
    def get_date(self):
        """获取选择的日期"""
        try:
            return datetime.strptime(self.date_var.get(), '%Y-%m-%d')
        except ValueError:
            messagebox.showerror("日期格式错误", "请使用YYYY-MM-DD格式的日期")
            return None
    
    def select_date(self):
        """打开日期选择对话框"""
        def on_date_selected():
            selected_date = cal.selection_get()
            self.date_var.set(selected_date.strftime('%Y-%m-%d'))
            top.destroy()
        
        top = tk.Toplevel(self)
        top.title("选择日期")
        top.geometry("400x350")
        
        # 创建日历控件
        cal = Calendar(
            top,
            font="Arial 10",
            locale='zh_CN',  # 设置中文显示
            selectmode='day',
            cursor="hand1",
            year=self.get_date().year,
            month=self.get_date().month,
            day=self.get_date().day
        )
        cal.pack(fill="both", expand=True, padx=10, pady=10)
        
        # 创建确认按钮
        ttk.Button(top, text="确认", command=on_date_selected).pack(pady=10)


class Logger:
    def __init__(self, status_var=None):
        self.status_var = status_var
        self.logs = []
    
    def log(self, message):
        """记录日志并更新状态栏"""
        print(message)
        self.logs.append(message)
        if self.status_var:
            self.status_var.set(message)
    
    def get_logs(self):
        return "\n".join(self.logs)